В строке
последовательно записаны n степеней двойки, то есть числа от 2 до 2n
без пробелов. Найдите значение n.
Вход. В одной
строке без пробелов записаны n (1 ≤ n ≤ 1000)
последовательных степеней двойки.
Выход. Вывести
значение n.
Пример входа |
Пример выхода |
248163264128 |
7 |
математика - логарифмы
Количество цифр в десятичной записи
числа n равно . Количество цифр в десятичной записи числа 2n равно . Начнем суммировать количество цифр в числах 2, 22,
23, 24, … . Суммирование продолжаем до тех пор, пока не
получим число, равное количеству цифр во входной строке.
Пример
Длина
строки 248163264128 равна 12.
Ищем такое n, для которого
= 12
Искомым
значением n будет 7.
Реализация алгоритма
Вычислим количество цифр len во входной строке. Читаем
входные данные до символа ‘\n’.
len = 0;
while(scanf("%c",&ch),
ch != '\n') len++;
В
переменной res суммируем количество цифр в числах 2, 22, 23,
24, … 2i. Процесс продолжаем, пока res не
станет равным числу цифр во входной строке len. Тогда значение i будет
искомым.
res = 0;
for(i = 1; ; i++)
{
Количество
цифр в числе 2i равно .
res = res + int(i *
log10(2.0)) + 1;
if (res == len) break;
}
Выводим
ответ.
printf("%d\n",i);